
import defineReactiveData from './reactive';
import { arrMethods } from './array';
import observeArr from './observeArr';

// 观察者
function Observer(data) {
  // 区分data是数组还是对象
  if (Array.isArray(data)) {
    // 数组的处理（重写数组方法: 原型上的七个数组方法都会改变原数组）
    data.__proto__ = arrMethods;
    // console.log(data);
    observeArr(data); // 添加观察(observeArr作用，如果数组里的项也是数组时重新调用observe)
  } else {
    this.walk(data);
  }
}

Observer.prototype.walk = function(data) { // 处理对象类型的数据
  var keys = Object.keys(data);

  for (var i = 0; i < keys.length; i++) {
    var key = keys[i],
        value = data[key];

    defineReactiveData(data, key, value); // 数据响应式处理
  }
}


export default Observer;